1. Technical Field
The present invention relates generally to computer systems, and in particular to operating system (OS) services of a computer system. Still more particularly, the present invention relates to a method and system for handling requests for operating system (OS) services from an application.
2. Description of the Related Art
Most computer systems utilize an operating system (OS) to enable processing of application programs and to complete other general hardware/software functions. An OS provides a plurality of services/functions that reside within the OS kernel. These functions (or services) can be accessed via a reference generated by an application and issued to an OS library. The OS library provides a list of each OS function that may currently be available for access by an application.
The desire to continually improve and expand the OS leads to the OS developers/providers/programmers frequently creating new functions and/or upgrades (newer versions) to the existing functions. OS developers frequently introduce new capabilities into the OS kernel that can be referenced by an application. With conventional methods, these functions are often package in the next version/release of the OS. For these functions to be available within a computer system, the function name must be added to the OS library and a new OS kernel (encompassing the function) is required to be loaded on the computer system. Then, the computer system is restarted to invoke the new function.
Since the availability of the new OS may be several months or years away, most modern operating systems, particularly various versions of UNIX™, are designed with the capability to extend a base kernel through dynamically loadable and unloadable modules called “kernel extensions.” These kernel extensions make use of kernel services, and in turn can provide services themselves. A kernel extension for a particular function has to be made available before an application can successfully reference the function. Thus, in order to allow an application to reference these newer/update functions while still using the current/older release of the OS, OS programmers typically have to write a kernel extension plus additional code to load the kernel extension onto the system and make the function available.
However, very often, the expanded library of functions lists the new/upgraded function before the function is provided within the current version of the OS, (i.e., the computer system's OS does not yet support the related underlying function listed within the OS library). Often, new libraries are provided for the current OS before the underlying functions can be made available. If an application references this function, a failure occurs. This failure may result in a restart of the OS. Such OS restarts are themselves problematic and not desired. Also, newer versions of applications may be designed to refer to services that are available only in a new version of the OS than currently exist on the computing device. In both scenarios, the application's request to reference the service fails and produces an error condition because the loader of the operating system cannot determine what service the request is referencing.
With the frequency at which new functions (or updates to existing functions) are generated, keeping an OS current with kernel extensions is a tedious and time consuming effort both in terms of designing these kernel extensions and associated code for loading the extensions and loading these extensions unto the computer systems. Certain programmers provide an indirect method for looking up the availability of a service. With the indirect method, an application is specially written to check for the availability of the service. The application then invokes the service indirectly, if the service is available. However, as with the above “direct” solution with kernel extensions, this indirect method is a tedious solution for programmers.
Using kernel extensions until the services are provided within the based operating system provides an additional drawback. As noted above, a kernel extension must be available and should be loaded before any applications refer to the specific service. However, in order for the-base OS to support the new service, the system usually has to be restarted, leading to a halt (or disruption) to executing system services. For a load intensive computer system that is required to remain operational without such disruption (system downtime), providing OS support for these newer/updated services by restarting the system may be undesirable.
The present invention thus recognizes that it would be desirable to enable an application's reference to an undefined/unavailable OS service to be handled without causing a failure condition and/or system shutdown/reboot. The invention further recognizes that providing an enhanced OS that allows direct handling of undefined/unavailable OS services without requiring development and deployment of specialized kernel extensions (along with the associated kernel-loading applications) would be a welcomed improvement. These and other benefits are provided by the invention described herein.